// Rs 

#include<p18f4550.h>
#include<delays.h>
#include<adc.h>
#include <capture.h>
#include <timers.h>


#pragma config FOSC = INTOSC_HS
#pragma config WDT = OFF
#pragma config DEBUG = ON
#pragma config LVP = OFF

// HT12D Vs PIC Mapping
#define   R_Data0       PORTBbits.RB0  
#define   R_Data1       PORTBbits.RB1  
#define   R_Data2       PORTBbits.RB2  
#define   R_Data3       PORTBbits.RB3  

//A0-A7 -->xx00000000;

#define   R_A0          PORTBbits.RB4 
#define   R_A1          PORTBbits.RB5  
#define   R_A2          PORTBbits.RB6  
#define   R_A3          PORTBbits.RB7 

#define   V_tst         PORTCbits.RC5

//HT12E Vs PIC Mapping

#define   T_Data0       PORTDbits.RD0  
#define   T_Data1       PORTDbits.RD1  
#define   T_Data2       PORTDbits.RD2  
#define   T_Data3       PORTDbits.RD3  

//A0-A7 -->xx00000000;

#define   T_A0           PORTDbits.RD4 
#define   T_A1           PORTDbits.RD5 
#define   T_A2           PORTDbits.RD6  
#define   T_A3           PORTDbits.RD7 

#define   TE             PORTCbits.RC4

 

//-----Node Functions get Data from sround Teprature , hummedity and Voltage value

char get_temp();
char get_hum();
char get_Vol();

int flag = 0;

void run();
void sleep();

void main()
{
    char RData;
    char byte;
    char T,H,V;
	char temp_val;
    char hum_val;
    char Vol_val;

    ADCON1=15;

// CONF PORTS:
	PORTA=0x00; 
	PORTB=0x00; 
	PORTC=0x00; 
	PORTD=0x00; 
	PORTE=0x00; 
	
	LATA=0x00; 
	LATB=0x00; 
	LATC=0x00; 
	LATD=0x00; 
	LATE=0x00; 
	
	TRISA=(0b00001111);
	TRISB=(0b00001111);
	TRISC=(0b00000000);
	TRISD=(0b00000000);
	TRISE=(0b00000000);

 temp_val = get_temp();
 hum_val  = get_hum();
 Vol_val  = get_Vol();


 while (1) 
{

 // Set Recever address to Bs  Transmmiter address

R_A0 = 1;
R_A1 = 0;
R_A2 = 0;//x
R_A3 = 0;//x


 Delay2KTCx(20); // wait for node 1 Time slot start 

// get Data from N1 recever

 byte = PORTB;
 byte = byte & 0x0F; // just take low nibble of PORTB

   if(byte = 0x02)  
            { 
       if(flag){
                // on TR --> set 0 on RC5
                   PORTCbits.RC5 = 1;

                // on S1 and S2 --> set 0 0n RC6
                   PORTCbits.RC6 = 1;

               }//end if flag

         Delay2KTCx(20);//wait the circuit to be stable

         run(); // applay run command

               } //end if run

   else if(byte = 0x0A)
                        ( 
                        if (!flag)
                             {  

                              sleep();// applay sleep

                              } // if node in sleep mode no need to sleep it again
                        )// end of sleep
  
   
 


}// End while

 

}//end main

-


void run()

{
// get Data From Sensors

char T,H,V;
char T1,H1,V1;

T=get_temp();
H=get_hum();
V=get_vol();

// set TR addess to Bs addres
// set active -->>> on
T_A0 = 0;
T_A1 = 0;

// set Data line s to 0's

T_Data0 = 0;
T_Data1 = 0;
T_Data2 = 0;
T_Data3 = 0;

TE   = 1; // Off Tanssmission 



//TS_low=T_Data0-->T_Data3
T1 = T & 0x0F ;
T1 = PORTD;
TE = 0;
//Delay to complete TR
TE =1;

//TS_High=T_Data0 -->T_Data3
T1= T & 0xF0;
T1= PORTD;
TE=0;
//delay
TE=1;

//Hs_low -->T_data
H1 = H & 0x0F ;
H1 = PORTD;
TE=0;
//wait
TE=1;

//HS_high --> T_data
H1 = H & 0xF0;
H1 = PORTD;
TE=0;
// wait
TE=1;

//VOltage --> T_data
V1 = V & 0x0F;
V1 = PORTD;
TE = 0 ;
//wait 
TE= 1;
}// end run



void sleep() 

{
flag = 1;

// off TR --> set 0 on RC5
PORTCbits.RC5 = 0;

// off S1 --> set 0 0n RC6
// off S2 --> set 0 0n RC6
PORTCbits.RC6 = 0;


}// end sleep



char get_temp()
{
char temp;
OpenADC (ADC_FOSC_64  & ADC_RIGHT_JUST/*left shift*/& ADC_2_TAD,ADC_CH0 & ADC_INT_OFF & ADC_REF_VDD_VSS , ADC_1ANA);
ConvertADC();
while(BusyADC())
temp=ReadADC();//get high = 8 bit-->sget reg value ADRESH  
temp= 5 * temp * 100/1024;
return temp;
}

char get_hum()
{

// Configure Capture1

OpenCapture1(C1_EVERY_RISE_EDGE & CAPTURE_INT_OFF);
OpenCapture2(C2_EVERY_FALL_EDGE & CAPTURE_INT_OFF);

// Configure Timer1
OpenTimer1(TIMER_INT_OFF & T1_SOURCE_INT & T1_SOURCE_CCP & T1_PS_1_1 & T1_16BIT_RW);



rise = ReadCapture1(); 
fall = ReadCapture2();
pulse=rise-fall;

if (pulse<0)
pulse=pulse*(-1); 


f= 1/pulse;
H = 565.1  0.0767 * f 


returen H;}


char get_Vol()
{
char Vol;

OpenADC (ADC_FOSC_64/*speed of exe*/  & ADC_RIGHT_JUST & ADC_2_TAD,ADC_CH2 /*channale num*/& ADC_INT_OFF & ADC_REF_VDD_VSS , ADC_1ANA/*Adcon1*/);
ConvertADC();
while(BusyADC());

Vol=ReadADC();


return Vol;
}

